/*
 *	@表单验证插件
 *	@作者：斗魂无极  日期：2017-1-4
 *
 *	使用方法：在控件添加verify属性，多验证方法用|分开，“_”后面跟随值
 *	must						必填
 *	length						固定长度
 *	min_val						最小长度_值
 *	max_val						最大长度_值
 *	eq_id						内容相等_对比控件ID
 *	eamil						正则验证邮箱
 *	phone						正则验证手机
 *	.......						各类正则验证，具体看正则参数配置
 *	exist						AJAX验证是否存在，通过POST提交 传值方法：{控件ID:控件值}	1=存在 0=不存在
 *	
 *	submit						表单提交按钮
 *
 *	
 *	
 */
 
//全局变量封装，统一管理
window.$my={
	verify 			: 'verify',
	successClass 	: 'successTips',
	errorClass 		: 'errorTips',
	tipsClass 		: 'verify',
	hide_style		: 'verify_tips_hide',
	true_tip 		: 'OK',
	swal			: true,					//有调用swal插件可以开启，否则关闭
	ajax_url		: 'url',
	ajaxDebug		: false
}

//正则变量封装
window.$reg={
	letter 			: /^[A-Za-z]+$/,									//纯英文字母
	number			: /^\d+$/,											//纯数字
	float			: /^\d+$|^\d+\.{0,1}\d+$/,							//小数
	LN				: /^\w+$/,											//字母或数字
	chinese			: /^[\u4e00-\u9fa5]+$/,								//汉字
	nomark			: /^[\w+\u4e00-\u9fa5]+$/,							//非符号
	html			: /<(.*)>.*<\/\1>|<(.*) \/>/,						//网页标记
	ip				: /(\d+)\.(\d+)\.(\d+)\.(\d+)/,						//IP地址
	email			: /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/,	//邮箱
	url				: /http:\/\/([\w-]+\.)+[\w-]+([\w-.?%&=]*)?/,		//网址
	fixPhone		: /\d{3}-\d{8}|\d{4}-\d{8}/,						//固话
	phone			: /^(1[1-9][0-9]|15[0|3|6|7|8|9]|18[8|9])\d{8}$/,	//手机
	qq				: /[1-9][0-9]{4,}/,									//QQ
	postoffice		: /^[1-9]\d{5}(?!\d)/,								//邮政
	IDcard15		: /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/,					//身份证15位
	IDcard18		: /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$/,		//身份证18位
	date			: /\d{4}-\d{2}-\d{2}/								//日期
}

layui.use(['jquery'], function () {
	let $ = layui.jquery;
	
	$('input[type=text]['+$my.verify+'],input[type=password]['+$my.verify+'],textarea['+$my.verify+'],input[type=file]['+$my.verify+']').blur(function (){
		var input=$(this);
		var tips_type=$(this).attr('verify_tips');						//标签提示方式
		var condition=(input.attr($my.verify));
		condition=condition.split('|');
		var val=input.val();
		val=trim(val);
		if(!is_must(condition) & val==""){
			cls_tips(input);
		}else{
			for(var i=0;i<condition.length;i++){
				var mark=condition[i];
				mark=mark.split('_');
				switch(mark[0]){
					case 'must':
						var val=input.val();
						if(val=='' | val==null){
							error_tips(input,'※ 必填',tips_type);
							return false;
						}
						break;
					case 'length':
						if(input.val().length!=mark[1]){
							error_tips(input,'内容必须为'+mark[1]+'位置',tips_type);
							return false;
						}
						break;
					case 'min':
						if(input.val().length<mark[1]){
							error_tips(input,'至少要输入'+mark[1]+'位',tips_type);
							return false;
						}
						break;
					case 'mins':
						if(input.val().replace(/[^\x00-\xff]/ig,"XX").length<mark[1]){
							error_tips(input,'至少要输入'+mark[1]+'字节',tips_type);
							return false;
						}
						break;
					case 'max':
						if(input.val().length>mark[1]){
							error_tips(input,'最多只能输入'+mark[1]+'位',tips_type);
							return false;
						}
						break;
					case 'maxs':
						if(input.val().replace(/[^\x00-\xff]/ig,"XX").length>mark[1]){
							error_tips(input,'最多只能输入'+mark[1]+'字节',tips_type);
							return false;
						}
						break;
					case 'eq':
						if($('#'+mark[1]).val()!=input.val()){
							if(input.attr('type')=='password'){
								error_tips(input,'两次密码不一致',tips_type);
							}else{
								var tip=input.attr('alt');
								error_tips(input,tip,tips_type);
							}
							return false;
						}
						break;
					case 'email':
						if(!$reg.email.test(input.val())){
							error_tips(input,'邮箱格式不正确',tips_type);
							return false;
						}
						break;
					case 'LN':
						if(!$reg.LN.test(input.val())){
							error_tips(input,'请输入英文或数字',tips_type);
							return false;
						}
						break;
					case 'CH':
						if(!$reg.chinese.test(input.val())){
							error_tips(input,'请输入中文汉字',tips_type);
							return false;
						}
						break;
					case 'number':
						if(!$reg.number.test(input.val())){
							error_tips(input,'请输入纯数字[整数]',tips_type);
							return false;
						}
						break;
					case 'float':
						if(!$reg.float.test(input.val())){
							error_tips(input,'请输入数值',tips_type);
							return false;
						}
						break;
					case 'phone':
						if(!$reg.phone.test(input.val())){
							error_tips(input,'手机号码格式不正确',tips_type);
							return false;
						}
						break;
					case 'gt0': 												//大于0
						var val=input.val();
						if(parseFloat(val)<=0){
							error_tips(input,'数值不能为0',tips_type);
							return false;
						}
						break;
					case 'exist':												//AJAX验证
						var org_val=input.attr('org_val');						//原本的值  用于判断是否没有修改过
						var url=input.attr($my.ajax_url);
						var name=input.attr('id');
						var value=input.val();
						if(org_val==value){
							cls_tips(input);
							send_check=false;
						}else{
							var data=eval("({'"+name+"':'"+value+"'})");			//字符串转JSON
							error_tips(input,'加载中......');
							$.post(url,data,function(result){
								if(result=='1'){
									error_tips(input,'已存在');
									return false;
								}else if(result=='0'){
									success_tips(input); 
								}else{
									if($my.ajaxDebug){
										error_tips(input,result);
									}else{
										error_tips(input,'加载失败！');
									}
									return false;
								}
							});
						}
						break;
					default:
						break;
				}
				if(i==(condition.length-1)){
					success_tips(input,'',tips_type);
				}
			}
		}
	});
	$('select['+$my.verify+']').blur(function(){
		var select=$(this);
		var name=select.attr('name');
		var last_select=$('select[name='+name+']:last');
		var select_val=select.find("option:selected").val();
		if(select_val!=''){
			success_tips(last_select,'');
		}else{
			layer.tips('请选择', '[name="'+name+'"]+div',{tips: [1,'#BF3646'],time: 3000,tipsMore: true});
			//error_tips(last_select,'请选择');
		}
	});
	$('input[type=radio]['+$my.verify+']').blur(function(){
		var radio=$(this);
		var name=radio.attr('name');
		var len=$('input[name='+name+']:checked').length;
		var last_radio=$('input[name='+name+']:last');
		if(len){
			success_tips(last_radio,'');
		}else{
			error_tips(last_radio,'请选择','select');
		}
	});
	$('input[type=checkbox]['+$my.verify+']').blur(function(){
		var checkbox=$(this);
		var name=checkbox.attr('name');
		var len=$('input[name='+name+']:checked').length;
		var last_checkbox=$('input[name='+name+']:last');
		if(len){
			success_tips(last_checkbox,'');
		}else{
			error_tips(last_checkbox,'请勾选该选项');
		}
	});
	
	$('[confirm]').click(function(){
		var tip=$(this).attr('confirm');
		var url=$(this).attr('href');
		if(tip=='') tip='您确定永久删除该信息吗？';
		swal(confirm_conf(tip),function(isConfirm){
			if(isConfirm){
				window.location=url;			
			}
		});
		return false;
	});
	
	
	//表单控件验证成功
	function success_tips(obj,tips,type){
		if(tips==null) tips=$my.true_tip;
		obj.removeClass($my.errorClass)
		   .addClass($my.successClass);
		$parent=obj.parent();
		$parent.find('.'+$my.tipsClass).remove();			//样式选择移除提示对话框
		switch(type){										//小贴士方式
			case undefined :								//默认 追加标签
				if(tips!=''){
					$parent.append("<label class='"+$my.tipsClass+' '+$my.successClass+"'>"+tips+"</label>");
				}
				break;
			case 'hide':									//隐藏
				$parent.append("<label class='"+$my.tipsClass+' '+$my.successClass+' '+$my.hide_style+"></label>");
				break;
		}
	}
	
	//表单控件验证失败
	function error_tips(obj,tips,type){
		obj.removeClass($my.successClass)
		   .addClass($my.errorClass);
		$parent=obj.parent();
		$parent.find('.'+$my.tipsClass).remove();			//样式选择移除提示对话框
		switch(type){
			case undefined :
				layer.tips(tips, '[name="'+obj.attr('name')+'"]',{tips: [1,'#BF3646'],time: 3000});
				//$parent.append("<label class='"+$my.tipsClass+' '+$my.errorClass+"'>"+tips+"</label>");
				break;
			case 'select' :
				layer.tips(tips, '[name="'+obj.attr('name')+'"]+div',{tips: [1,'#BF3646'],time: 3000});
				break;
			case 'hide':
				$parent.append("<label class='"+$my.tipsClass+' '+$my.errorClass+' '+$my.hide_style+"></label>");
				break;
		}
	}
	
	//清除表单控件验证提示
	function cls_tips(obj){
		obj.removeClass($my.successClass)
		   .removeClass($my.errorClass);
		$parent=obj.parent();
		$parent.find('.'+$my.tipsClass).remove();   
	}
	
	//判断检测的对象是否必填
	function is_must(arr){
		if($.inArray('must',arr)>-1){
		 	return true;
		}else{
			return false;
		}
	}
	
	//删除左右两端的空格
	function trim(str){
		return $.trim(str);
		//return str.replace(/^(\s|\u00A0)+|(\s|\u00A0)+$/g, "");
	}
});